using System;
using System.Collections.Generic;
using System.Text;

namespace Zsa.Reflection.Discovery
{
    public enum ArgumentType
    {
        Unknown = 0,
        InstanceDeclaration = 1,
        Constructor = 2,
        Property = 4

    }

    /// <summary>
    /// The activation attribute type.
    /// </summary>
    [Flags()]
    public enum ActivationAttributeType : byte
    {
        Unknown = 0,
        /// <summary>
        /// Declartion of an instance.  This is required on 
        /// at least on of the instance attributes.
        /// </summary>
        InstanceDeclaration = 1,
        /// <summary>
        /// Indicate the attribute contains constructor 
        /// argument information.
        /// </summary>
        Constructor = 2,
        /// <summary>
        /// Indicates the attribute contains a value of a get
        /// set property that will be set after the instance is created.
        /// </summary>
        Property = 4,
        /// <summary>
        /// Indicates that the attribute contains the instance factory type.
        /// </summary>
        ProviderType = 8,
        /// <summary>
        /// All.
        /// </summary>
        All = InstanceDeclaration | Constructor | Property,
        //Invalid = ~All
    }

    /// <summary>
    /// The search parameters.
    /// </summary>
    public enum TypeSearchParameterType
    {
        Unknown = 0,
        /// <summary>
        /// The type name equals the value.
        /// Use string to specify.
        /// </summary>
        NameEquals,
        /// <summary>
        /// The type name contains the string value.
        /// Use string to specify.
        /// </summary>
        NameContains,
        /// <summary>
        /// The type inhierits from the specified type.
        /// Use type to specify.
        /// </summary>
        InheiritsFrom,
        /// <summary>
        /// The type implements the specified interface.
        /// Use type to specify.
        /// </summary>
        ImplementsInterface,
        /// <summary>
        /// The type must be in the specified namespace.
        /// Use string to specify.
        /// </summary>
        NamespaceEquals,
        /// <summary>
        /// The type exists in the specified namespace or
        /// a namespace nested below.
        /// Use string to specify.
        /// </summary>
        NamespaceIn,
        /// <summary>
        /// The type is of the specified member type.
        /// Use string to specify.
        /// </summary>
        MemberTypeEquals,
        /// <summary>
        /// The type has the specified attribute.
        /// Use type to specify.
        /// </summary>
        HasAttrbiute,
        /// <summary>
        /// The type or a type that it derives from has the specified 
        /// attribute.
        /// </summary>
        HasAttributeInherit,
        /// <summary>
        /// The type attributes flags equal that specified value.
        /// </summary>
        TypeAttributesEqual,
        /// <summary>
        /// Checks to see if the type attributes contains the has specified 
        /// flags.
        /// </summary>
        TypeAttributesContains



    }

    public enum SearchType
    {
        None = 0,
        Type,
        Member,
        Attribute,



    }

}
